PythonとConfluence REST APIを使ってスペース毎の添付ファイル容量を一覧表示する

PythonとConfluence REST APIを使ってスペース毎の添付ファイル容量を一覧表示する

Clock Icon2021.07.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

PythonとConfluenceのREST APIを使って、スペース毎・ページ毎の添付ファイル容量を一覧出力しました。このブログはその備忘録です。

想定読者

  • Confluence Cloudで利用している添付ファイル容量を調べたい管理者の方
  • ConfluenceでのREST APIの使い方について雰囲気を知りたいPython開発者の方
  • 情シスって普段なにしてるか知りたい方

背景

クラスメソッドでは社内WikiとしてConfluece Cloudを利用しています。先日Atlassian社から「ストレージの利用量が80%超過してるよ」というメールが届きました。

Your team has reached 80% of its 250 GB storage limit on Confluence.

プランを "Confluence Cloud Premium" にすればストレージ容量無制限になるようですが、年間コストが倍になってしまいます。

ここはファイルサーバー代わりになっているページをGoogle Driveに移行してもらい、ストレージ容量を減らしてもらいたい。 ただユーザースペースを含めると400以上あるスペースそれぞれの利用量を管理画面から調べるのは大変です。またスペース毎だけでなく、ページ毎の利用量もわかった方が整理する際の参考になりそうです。

管理画面を調べたところ適した画面はなさそうです。そこでサポート窓口に相談したところ、下記の方法を教えていただきました。

圧倒的感謝!ということでさっそく実行してみると、無事スペース毎・ページ毎の添付ファイル数をCSVファイルに出力することができました。

サンプルコードの問題

ただ結果のCSVファイルを見てみるとなにかおかしい。スペース毎の合計をしても200GB(250GBの80%)にはならないし、出力されるスペース数が明らかに少ないです。

これはなにかリミットに引っかかっているな、と思い調べたところ。下記のページを見つけました。

limit
integer

The maximum number of spaces to return per page. Note, this may be restricted by fixed system limits.
Default: 25, Minimum: 0, Format: int32

APIで一度にとってこれるのが25件ずつになってるようですね。これを1万件にしようか考えましたが、今度はAPIの呼び出し制限に引っかかりそうです。 そこでちゃんとページング処理を検討して、25件ずつ取り出して処理するようコードを見直しました。

コード改修

改修後のコードはGitHubにあげています。改修はご自由にどうぞ。なおこのコードを実行したことによる一切の損失の責任は当方では負いません(お約束)。

改修箇所

  • ユーザー名、トークン、テナントのベースURLを .env ファイルから読み込むようにした。python-dotenv 利用。
  • ログ出力を柔軟に変更できるように logging モジュールを利用する。pprint で整形もがんばる。
  • APIで一度に取得できる制限25より大きいスペース/ページ/添付ファイル数に対応。yield 活用。
  • カンマを含むページタイトルもGoogleスプレッドシートで読みこめるよう囲み文字をダブルクオーテーションに変更。

社内でのPythonモジュール管理は pipenv 使うのが主流と聞いたのでそれに合わせてます。

まとめ

コード化しておくことで、今後は半年に一度など定期的な棚卸しも楽になりそうです。

CSVファイルは最終的にGoogleスプレッドシートに読み込ませて加工・社内共有するので、Google Colaboratory (Jupyter Notebook as a Service)を使って最初からスプレッドシートに出力させるとより誰でも簡単に状況把握ができそうです。

そうそう、使い終わったAPIトークンはちゃんと消しておかないと。使い終わった環境のお掃除までが保守業務のお仕事です。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.